Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®æ·±æãããã®å©ç¹ãå®è£ æè¡ãã¢ããªã®ããã©ãŒãã³ã¹ãšUXãžã®åœ±é¿ãæ¢ããŸããã¬ã³ããªã³ã°åªå 床ãæé©åããããã¹ã ãŒãºãªã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸããŸãã
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ïŒã¬ã³ããªã³ã°åªå 床ããã¹ã¿ãŒãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããã
çŸä»£ã®ãŠã§ãéçºã®äžçã§ã¯ãã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒãæäŸããããšãæãéèŠã§ããReactã¢ããªã±ãŒã·ã§ã³ãè€éåããã«ã€ããŠãæé©ãªããã©ãŒãã³ã¹ã確ä¿ããããšã¯ãŸããŸãå°é£ã«ãªããŸããReactã®ã³ã³ã«ã¬ã³ãã¢ãŒãå ã®äž»èŠæ©èœã§ããReactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãã¬ã³ããªã³ã°ã®åªå 床ã管çããUIã®ããªãŒãºãé²ãããã®åŒ·åãªãœãªã¥ãŒã·ã§ã³ãæäŸããUXãå€§å¹ ã«åäžãããŸãã
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ãšã¯ïŒ
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãReactãã¬ã³ããªã³ã°äœæ¥ãããå°ãããäžæå¯èœãªãã£ã³ã¯ã«åå²ã§ããããã«ããæ©èœã§ããåäžã®é·æéå®è¡ãããã¬ã³ããªã³ã°ã¿ã¹ã¯ã§ã¡ã€ã³ã¹ã¬ããããããã¯ãã代ããã«ãReactã¯äžæåæ¢ãããã©ãŠã¶ã«å¶åŸ¡ãæ»ããŠãŠãŒã¶ãŒå ¥åãä»ã®éèŠãªã¿ã¹ã¯ãåŠçãããåŸã§ã¬ã³ããªã³ã°ãåéã§ããŸããããã«ããããã©ãŠã¶ãå¿çäžèœã«ãªãã®ãé²ãããŠãŒã¶ãŒã«ãšã£ãŠããã¹ã ãŒãºã§ã€ã³ã¿ã©ã¯ãã£ããªäœéšãä¿èšŒããŸãã
ããã¯ãå€§èŠæš¡ã§è€éãªé£äºãæºåãããããªãã®ã ãšèããŠãã ãããäžåºŠã«ãã¹ãŠã調çããããšããã®ã§ã¯ãªããéèãåãããœãŒã¹ãæºåããåã ã®ã³ã³ããŒãã³ããå¥ã ã«èª¿çããŠããæåŸã«çµã¿ç«ãŠããããããŸãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã«ãããReactã¯ã¬ã³ããªã³ã°ã§åæ§ã®ããšãè¡ãã倧ããªUIæŽæ°ãããå°ããã管çããããéšåã«åå²ã§ããŸãã
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãªãéèŠãïŒ
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®äž»ãªå©ç¹ã¯ãç¹ã«è€éãªUIãé »ç¹ãªããŒã¿æŽæ°ãããã¢ããªã±ãŒã·ã§ã³ã§ã®å¿çæ§ã®åäžã§ãã以äžã«äž»ãªå©ç¹ããŸãšããŸãïŒ
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒ ãã©ãŠã¶ããããã¯ãããã®ãé²ãããšã§ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯UIããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¯ŸããŠå¿çæ§ãä¿ã€ããšãä¿èšŒããŸããããã«ãããããã¹ã ãŒãºãªã¢ãã¡ãŒã·ã§ã³ãã¯ãªãã¯ãããŒããŒãå ¥åãžã®ããéãå¿çæéããããŠå šäœçã«ããæ¥œãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãç·æéã§ã¬ã³ããªã³ã°ãå¿ ãããéãããããã§ã¯ãããŸããããããã¹ã ãŒãºã§äºæž¬å¯èœã«ããŸããããã¯ç¹ã«åŠçèœåãéãããããã€ã¹ã§éèŠã§ãã
- ããè¯ããªãœãŒã¹ç®¡çïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã«ããããã©ãŠã¶ã¯ãªãœãŒã¹ãããå¹ççã«å²ãåœãŠãããšãã§ããé·æéå®è¡ãããã¿ã¹ã¯ãCPUãç¬å ããä»ã®ããã»ã¹ãé ããªãã®ãé²ããŸãã
- æŽæ°ã®åªå é äœä»ãïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã«ãããReactã¯ãŠãŒã¶ãŒå ¥åã«é¢é£ãããããªéèŠãªæŽæ°ããéèŠåºŠã®äœãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãããåªå ã§ããŸããããã«ãããä»ã®æŽæ°ãé²è¡äžã§ãã£ãŠããUIã¯ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«è¿ éã«å¿çããŸãã
React Fiberãšã³ã³ã«ã¬ã³ãã¢ãŒãã®çè§£
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãReactã®Fiberã¢ãŒããã¯ãã£ãšã³ã³ã«ã¬ã³ãã¢ãŒããšæ·±ãçµã³ã€ããŠããŸãããã®æŠå¿µãå®å šã«çè§£ããããã«ã¯ããããã®åºç€ãšãªãæè¡ãçè§£ããããšãäžå¯æ¬ ã§ãã
React Fiber
React Fiberã¯ãReactã®å調åïŒreconciliationïŒã¢ã«ãŽãªãºã ãå®å šã«æžãçŽãããã®ã§ãããã©ãŒãã³ã¹ãåäžãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®ãããªæ°æ©èœãå¯èœã«ããããã«èšèšãããŸãããFiberã®éèŠãªé©æ°ã¯ãã¬ã³ããªã³ã°äœæ¥ãããã¡ã€ããŒããšåŒã°ããããå°ããªåäœã«åå²ã§ããããšã§ããåãã¡ã€ããŒã¯ãã³ã³ããŒãã³ããDOMããŒããªã©ãUIã®åäžã®éšåã衚ããŸããFiberã«ãããReactã¯UIã®ããŸããŸãªéšåã§ã®äœæ¥ãäžæåæ¢ãåéãåªå é äœä»ãããããšãã§ããã¿ã€ã ã¹ã©ã€ã·ã³ã°ãå¯èœã«ããŸãã
ã³ã³ã«ã¬ã³ãã¢ãŒã
ã³ã³ã«ã¬ã³ãã¢ãŒãã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ãSuspenseãTransitionsãªã©ã®é«åºŠãªæ©èœãè§£æŸããReactã®æ°ããæ©èœã»ããã§ããããã«ãããReactã¯UIã®è€æ°ã®ããŒãžã§ã³ãåæã«åŠçã§ããéåæã¬ã³ããªã³ã°ãšæŽæ°ã®åªå é äœä»ããå¯èœã«ãªããŸããã³ã³ã«ã¬ã³ãã¢ãŒãã¯ããã©ã«ãã§ã¯æå¹ã«ãªã£ãŠãããããªããã€ã³ãå¿ èŠã§ãã
Reactã§ã®ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å®è£
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã掻çšããã«ã¯ãReactã®ã³ã³ã«ã¬ã³ãã¢ãŒãã䜿çšããå¿ èŠããããŸãã以äžã«ããããæå¹ã«ããŠã¢ããªã±ãŒã·ã§ã³ã«ã¿ã€ã ã¹ã©ã€ã·ã³ã°ãå®è£ ããæ¹æ³ã瀺ããŸãïŒ
ã³ã³ã«ã¬ã³ãã¢ãŒãã®æå¹å
ã³ã³ã«ã¬ã³ãã¢ãŒããæå¹ã«ããæ¹æ³ã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°æ¹æ³ã«ãã£ãŠç°ãªããŸãã
- æ°ããã¢ããªã±ãŒã·ã§ã³ã®å ŽåïŒ
index.jsãŸãã¯ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ãã§ãReactDOM.renderã®ä»£ããã«createRootã䜿çšããŸãã - æ¢åã®ã¢ããªã±ãŒã·ã§ã³ã®å ŽåïŒ
createRootãžã®ç§»è¡ã«ã¯ãæ¢åã®ã³ã³ããŒãã³ããšã®äºææ§ã確ä¿ããããã«æ éãªèšç»ãšãã¹ããå¿ èŠã«ãªãå ŽåããããŸãã
createRootã䜿çšããäŸïŒ
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container); // TypeScriptã䜿çšããå Žå㯠createRoot(container!)
root.render( );
createRootã䜿çšããããšã§ãã³ã³ã«ã¬ã³ãã¢ãŒãã«ãªããã€ã³ããã¿ã€ã ã¹ã©ã€ã·ã³ã°ãæå¹ã«ããŸãããã ããã³ã³ã«ã¬ã³ãã¢ãŒããæå¹ã«ããããšã¯æåã®ã¹ãããã«ãããŸããããã®æ©èœã掻çšã§ããããã«ã³ãŒããæ§æããå¿
èŠããããŸãã
éèŠã§ãªãæŽæ°ã®ããã®useDeferredValueã®äœ¿çš
useDeferredValueããã¯ã䜿çšãããšãUIã®éèŠåºŠã®äœãéšåãžã®æŽæ°ãé
å»¶ãããããšãã§ããŸããããã¯ãæ€çŽ¢çµæãäºæ¬¡çãªã³ã³ãã³ããªã©ããŠãŒã¶ãŒå
¥åã«å³åº§ã«æŽæ°ããå¿
èŠããªãèŠçŽ ã«åœ¹ç«ã¡ãŸãã
äŸïŒ
import React, { useState, useDeferredValue } from 'react';
function SearchResults({ query }) {
// æ€çŽ¢çµæã®æŽæ°ã500msé
å»¶ããã
const deferredQuery = useDeferredValue(query, { timeoutMs: 500 });
// é
å»¶ãããã¯ãšãªã«åºã¥ããŠæ€çŽ¢çµæãååŸãã
const results = useSearchResults(deferredQuery);
return (
{results.map(result => (
- {result.title}
))}
);
}
function SearchBar() {
const [query, setQuery] = useState('');
return (
setQuery(e.target.value)}
/>
);
}
function useSearchResults(query) {
const [results, setResults] = useState([]);
React.useEffect(() => {
// APIããæ€çŽ¢çµæãååŸããã·ãã¥ã¬ãŒã·ã§ã³
const timeoutId = setTimeout(() => {
const fakeResults = Array.from({ length: 5 }, (_, i) => ({
id: i,
title: `Result for "${query}" ${i + 1}`
}));
setResults(fakeResults);
}, 200);
return () => clearTimeout(timeoutId);
}, [query]);
return results;
}
export default SearchBar;
ãã®äŸã§ã¯ãuseDeferredValueããã¯ã¯ãæ€çŽ¢ããŒãžã®å
¥åãªã©ãããéèŠãªæŽæ°ãReactãåŠçããæ©äŒãåŸããŸã§ãæ€çŽ¢çµæã®æŽæ°ãé
å»¶ãããŸããUIã¯ãæ€çŽ¢çµæã®ååŸãšã¬ã³ããªã³ã°ã«æéãããã£ãŠãå¿çæ§ãä¿ã¡ãŸããtimeoutMsãã©ã¡ãŒã¿ã¯æå€§é
å»¶ãå¶åŸ¡ããŸããã¿ã€ã ã¢ãŠããåããåã«æ°ããå€ãå©çšå¯èœã«ãªã£ãå Žåãé
å»¶ãããå€ã¯ããã«æŽæ°ãããŸãããã®å€ã調æŽããããšã§ãå¿çæ§ãšææ°æ§ã®ãã©ã³ã¹ã埮調æŽã§ããŸãã
UIãã©ã³ãžã·ã§ã³ã®ããã®useTransitionã®äœ¿çš
useTransitionããã¯ã䜿çšãããšãUIã®æŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ã§ããReactã«ä»ã®æŽæ°ãããç·æ¥åºŠãäœãåªå
ããããã«æç€ºããŸããããã¯ãã«ãŒãéã®ããã²ãŒã·ã§ã³ãéèŠã§ãªãUIèŠçŽ ã®æŽæ°ãªã©ãããã«åæ ããå¿
èŠã®ãªã倿Žã«åœ¹ç«ã¡ãŸãã
äŸïŒ
import React, { useState, useTransition } from 'react';
function MyComponent() {
const [isPending, startTransition] = useTransition();
const [data, setData] = useState(null);
const handleClick = () => {
startTransition(() => {
// APIããããŒã¿ãååŸããã·ãã¥ã¬ãŒã·ã§ã³
setTimeout(() => {
setData({ value: 'New data' });
}, 1000);
});
};
return (
{data && Data: {data.value}
}
);
}
export default MyComponent;
ãã®äŸã§ã¯ãuseTransitionããã¯ãããŒã¿èªã¿èŸŒã¿ããã»ã¹ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããŸããReactã¯ãããŒã¿èªã¿èŸŒã¿ããã»ã¹ããããŠãŒã¶ãŒå
¥åãªã©ã®ä»ã®æŽæ°ãåªå
ããŸããisPendingãã©ã°ã¯ãã©ã³ãžã·ã§ã³ãé²è¡äžãã©ããã瀺ããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããããšãã§ããŸãã
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®ãã¹ããã©ã¯ãã£ã¹
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã广çã«å©çšããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
- ããã«ããã¯ã®ç¹å®ïŒ React Profilerã䜿çšããŠãããã©ãŒãã³ã¹åé¡ãåŒãèµ·ãããŠããã³ã³ããŒãã³ããç¹å®ããŸãããŸããããã®ã³ã³ããŒãã³ãã®æé©åã«éäžããŸãã
- æŽæ°ã®åªå é äœä»ãïŒ ã©ã®æŽæ°ã峿ã§ããå¿ èŠããããã©ããé å»¶ãŸãã¯ãã©ã³ãžã·ã§ã³ãšããŠæ±ããããæ éã«æ€èšããŸãã
- äžèŠãªã¬ã³ããªã³ã°ã®åé¿ïŒ
React.memoãuseMemoãuseCallbackã䜿çšããŠãäžèŠãªåã¬ã³ããªã³ã°ãé²ããŸãã - ããŒã¿æ§é ã®æé©åïŒ å¹ççãªããŒã¿æ§é ã䜿çšããŠãã¬ã³ããªã³ã°äžã®ããŒã¿åŠçæéãæå°éã«æããŸãã
- ãªãœãŒã¹ã®é å»¶èªã¿èŸŒã¿ïŒ React.lazyã䜿çšããŠãå¿ èŠãªãšãã«ã®ã¿ã³ã³ããŒãã³ããèªã¿èŸŒã¿ãŸããã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ãã©ãŒã«ããã¯UIã衚瀺ããããã«Suspenseã®äœ¿çšãæ€èšããŠãã ããã
- 培åºçãªãã¹ãïŒ æ§ã ãªããã€ã¹ããã©ãŠã¶ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ãæåŸ ã©ããã«æ©èœããŠããããšã確èªããŸããç¹ã«äœã¹ããã¯ã®ããã€ã¹ã§ã®ããã©ãŒãã³ã¹ã«æ³šæããŠãã ããã
- ããã©ãŒãã³ã¹ã®ç£èŠïŒ ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããå¿ èŠã«å¿ããŠèª¿æŽãè¡ããŸãã
åœéåïŒi18nïŒã«é¢ããèæ ®äºé
ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã«ã¿ã€ã ã¹ã©ã€ã·ã³ã°ãå®è£ ããéã«ã¯ãåœéåïŒi18nïŒãããã©ãŒãã³ã¹ã«äžãã圱é¿ãèæ ®ããŠãã ãããç°ãªããã±ãŒã«ã§ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããšã¯ãç¹ã«è€éãªãã©ãŒãããã«ãŒã«ã倧ããªç¿»èš³ãã¡ã€ã«ã䜿çšããŠããå Žåãèšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸãã
以äžã¯i18nã«ç¹åããèæ ®äºé ã§ãïŒ
- 翻蚳èªã¿èŸŒã¿ã®æé©åïŒ ã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ã翻蚳ãã¡ã€ã«ãéåæã«èªã¿èŸŒã¿ãŸããã³ãŒãåå²ã䜿çšããŠãçŸåšã®ãã±ãŒã«ã«å¿ èŠãªç¿»èš³ã®ã¿ãèªã¿èŸŒãããšãæ€èšããŠãã ããã
- å¹ççãªãã©ãŒãããã©ã€ãã©ãªã®äœ¿çšïŒ ããã©ãŒãã³ã¹ã«æé©åãããi18nãã©ãŒãããã©ã€ãã©ãªãéžæããŸããäžèŠãªèšç®ãè¡ã£ãããéå°ãªDOMããŒããäœæãããããã©ã€ãã©ãªã®äœ¿çšã¯é¿ããŠãã ããã
- ãã©ãŒãããæžã¿å€ã®ãã£ãã·ã¥ïŒ ãã©ãŒãããæžã¿ã®å€ããã£ãã·ã¥ããŠãäžå¿
èŠã«åèšç®ããã®ãé¿ããŸãã
useMemoãåæ§ã®ãã¯ããã¯ã䜿çšããŠããã©ãŒããã颿°ã®çµæãã¡ã¢åããŸãã - è€æ°ãã±ãŒã«ã§ã®ãã¹ãïŒ æ§ã ãªãã±ãŒã«ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããç°ãªãèšèªãå°åã§ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã广çã«æ©èœããŠããããšã確èªããŸããè€éãªãã©ãŒãããã«ãŒã«ãå³ããå·Šãžã®ã¬ã€ã¢ãŠããæã€ãã±ãŒã«ã«ã¯ç¹ã«æ³šæããŠãã ããã
äŸïŒéåæã§ã®ç¿»èš³èªã¿èŸŒã¿
ãã¹ãŠã®ç¿»èš³ãåæçã«èªã¿èŸŒã代ããã«ãåçã€ã³ããŒãã䜿çšããŠãªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸãïŒ
import React, { useState, useEffect } from 'react';
function MyComponent() {
const [translations, setTranslations] = useState(null);
useEffect(() => {
async function loadTranslations() {
try {
const module = await import(`./translations/${getCurrentLocale()}.json`);
setTranslations(module.default);
} catch (error) {
console.error("Error loading translations:", error);
}
}
loadTranslations();
}, []);
if (!translations) {
return Loading translations...
;
}
return (
{translations.greeting}
);
}
function getCurrentLocale() {
// çŸåšã®ãã±ãŒã«ã決å®ããããžãã¯ïŒäŸïŒãã©ãŠã¶èšå®ããŠãŒã¶ãŒèšå®ããïŒ
return 'en'; // äŸ
}
export default MyComponent;
ãã®äŸã¯ã翻蚳ãã¡ã€ã«ãéåæã«èªã¿èŸŒã¿ãã¡ã€ã³ã¹ã¬ããã®ãããã¯ãé²ããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžãããæ¹æ³ã瀺ããŠããŸãããšã©ãŒãã³ããªã³ã°ãéèŠã§ããtry...catchãããã¯ã«ããã翻蚳èªã¿èŸŒã¿äžã®ãšã©ãŒãææããããã°ã«èšé²ãããŸããgetCurrentLocale()颿°ã¯ãã¬ãŒã¹ãã«ããŒã§ããã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ã«åºã¥ããŠçŸåšã®ãã±ãŒã«ã決å®ããããžãã¯ãå®è£
ããå¿
èŠããããŸãã
å®äžçã®ã¢ããªã±ãŒã·ã§ã³ã«ãããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®äŸ
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãããã©ãŒãã³ã¹ãšUXãåäžãããããã«ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ã«é©çšã§ããŸãã以äžã«ããã€ãã®äŸãæããŸãïŒ
- Eã³ããŒã¹ãµã€ãïŒ ååãªã¹ããæ€çŽ¢çµæããã§ãã¯ã¢ãŠãããã»ã¹ã®å¿çæ§ãåäžãããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒ ã¹ã ãŒãºãªã¹ã¯ããŒã«ããã£ãŒãã®é«éæŽæ°ãæçš¿ãžã®å¿çæ§ã®é«ãã€ã³ã¿ã©ã¯ã·ã§ã³ãä¿èšŒããŸãã
- ããŒã¿å¯èŠåããã·ã¥ããŒãïŒ UIã®ããªãŒãºãªãã«å€§èŠæš¡ããŒã¿ã»ããã®ã€ã³ã¿ã©ã¯ãã£ããªæ¢çŽ¢ãå¯èœã«ããŸãã
- ãªã³ã©ã€ã³ã²ãŒã ãã©ãããã©ãŒã ïŒ ã·ãŒã ã¬ã¹ãªã²ãŒã äœéšã®ããã«ãäžè²«ãããã¬ãŒã ã¬ãŒããšå¿çæ§ã®é«ãã³ã³ãããŒã«ãç¶æããŸãã
- å ±åç·šéããŒã«ïŒ ãªã¢ã«ã¿ã€ã ã®æŽæ°ãæäŸããå ±åç·šéã»ãã·ã§ã³äžã®UIã®é å»¶ãé²ããŸãã
課é¡ãšèæ ®äºé
ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯å€§ããªå©ç¹ãæäŸããŸããããã®å®è£ ã«é¢é£ãã課é¡ãšèæ ®äºé ãèªèããããšãäžå¯æ¬ ã§ãïŒ
- è€éæ§ã®å¢å ïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å®è£ ã¯ã³ãŒãããŒã¹ã«è€éããå ããå¯èœæ§ããããæ éãªèšç»ãšãã¹ããå¿ èŠã§ãã
- èŠèŠçãªã¢ãŒãã£ãã¡ã¯ãã®å¯èœæ§ïŒ å Žåã«ãã£ãŠã¯ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ãã¡ãã€ããäžå®å šãªã¬ã³ããªã³ã°ãªã©ã®èŠèŠçãªã¢ãŒãã£ãã¡ã¯ããåŒãèµ·ããããšããããŸããããã¯ããã©ã³ãžã·ã§ã³ãæ éã«ç®¡çããéèŠåºŠã®äœãæŽæ°ãé å»¶ãããããšã§è»œæžã§ããŸãã
- äºææ§ã®åé¡ïŒ ã³ã³ã«ã¬ã³ãã¢ãŒãã¯ãæ¢åã®ãã¹ãŠã®Reactã³ã³ããŒãã³ããã©ã€ãã©ãªãšäºææ§ããããšã¯éããŸãããäºææ§ã確ä¿ããããã«ã¯åŸ¹åºçãªãã¹ããäžå¯æ¬ ã§ãã
- ãããã°ã®èª²é¡ïŒ ã¿ã€ã ã¹ã©ã€ã·ã³ã°ã«é¢é£ããåé¡ã®ãããã°ã¯ãåŸæ¥ã®Reactã³ãŒãã®ãããã°ãããå°é£ãªå ŽåããããŸããReact DevTools Profilerã¯ãããã©ãŒãã³ã¹ã®åé¡ãç¹å®ã解決ããããã®è²ŽéãªããŒã«ãšãªãåŸãŸãã
çµè«
Reactã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯ãã¬ã³ããªã³ã°ã®åªå 床ã管çããè€éãªReactã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®åŒ·åãªãã¯ããã¯ã§ããã¬ã³ããªã³ã°äœæ¥ãããå°ãããäžæå¯èœãªãã£ã³ã¯ã«åå²ããããšã§ãã¿ã€ã ã¹ã©ã€ã·ã³ã°ã¯UIã®ããªãŒãºãé²ããããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸããã¿ã€ã ã¹ã©ã€ã·ã³ã°ã®å®è£ ã¯ã³ãŒãããŒã¹ã«è€éããå ããå¯èœæ§ããããŸãããããã©ãŒãã³ã¹ãšUXã®é¢ã§ã®å©ç¹ã¯ããã®åŽåã«èŠåã䟡å€ãããããšãå€ãã§ããReact Fiberãšã³ã³ã«ã¬ã³ãã¢ãŒãã®åºæ¬æŠå¿µãçè§£ããå®è£ ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãäžçäžã®ãŠãŒã¶ãŒãåã°ãã髿§èœã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªReactã¢ããªã±ãŒã·ã§ã³ã广çã«äœæã§ããŸããæé©ãªããã©ãŒãã³ã¹ãšç°ãªãããã€ã¹ããã©ãŠã¶éã§ã®äºææ§ã確ä¿ããããã«ãåžžã«ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°ãšåŸ¹åºçãªãã¹ããå¿ããªãã§ãã ããã